import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;

public class Solution1160 {
    /**
     * 给你一份『词汇表』（字符串数组） words 和一张『字母表』（字符串） chars。
     * <p>
     * 假如你可以用 chars 中的『字母』（字符）拼写出 words 中的某个『单词』（字符串），那么我们就认为你掌握了这个单词。
     * <p>
     * 注意：每次拼写时，chars 中的每个字母都只能用一次。
     * <p>
     * 返回词汇表 words 中你掌握的所有单词的 长度之和。
     */
    public int countCharacters(String[] words, String chars) {
        Map<Character, Integer> map = new HashMap<>();
        for (char c : chars.toCharArray()) {
            if (map.containsKey(c)) {
                map.put(c, map.get(c) + 1);
            } else {
                map.put(c, 1);
            }
        }
        int result = 0;
        for (String word : words) {
            Map<Character, Integer> help = new HashMap<>(map);
            char[] charArray = word.toCharArray();
            for (int i = 0; i < charArray.length; i++) {
                char c = charArray[i];
                if (!help.containsKey(c)) {
                    break;
                } else if (help.get(c) == 1) {
                    help.remove(c);
                } else if (help.get(c) > 1) {
                    help.put(c, help.get(c) - 1);
                }
                if (i == charArray.length -1){
                    result += charArray.length;
                }
            }
        }
        return result;
    }
}
